package org.example;

import com.gargoylesoftware.htmlunit.javascript.host.canvas.WebGL2RenderingContext;
import jdk.internal.dynalink.support.BottomGuardingDynamicLinker;
import org.apache.commons.io.FileUtils;
import org.openqa.selenium.*;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.interactions.Actions;
import org.openqa.selenium.support.ui.Select;
import org.openqa.selenium.support.ui.Sleeper;

import javax.swing.*;
import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.Set;

import static java.lang.Thread.sleep;
import static java.util.concurrent.TimeUnit.MILLISECONDS;

public class Main {
    public static void main(String[] args) throws InterruptedException, IOException {
//        test1();
//        test2();
//        test3();
//        test5();
//        test6();
//        test7();
//        test8();
//        test9();
//        test10();

//        test12();
//        test13();
//        test14();
//        test15();
//        test16();
//        test17();
//        test18();
//        test19();
//        test20();
//        test21();
//        test22();
        test23();
    }

    private static void test23() throws IOException, InterruptedException {
        // 获取浏览器驱动
        WebDriver webDriver = new ChromeDriver();
        // 跳转百度页面
        webDriver.get("https://www.baidu.com/");
        sleep(3000);
        // 定位搜索框，输入张三，点击百度一下
        webDriver.findElement(By.cssSelector("#kw")).sendKeys("张三");
        webDriver.findElement(By.cssSelector("#su"));
        sleep(3000);
        // 截图
        File screenshotAs = ((TakesScreenshot) webDriver).getScreenshotAs(OutputType.FILE);
        // 将截图复制到指定的路径
        FileUtils.copyFile(screenshotAs, new File("d://搜索页面截图.pnj"));
        webDriver.quit();
    }

    private static void test22() throws InterruptedException {
        // 获取浏览器驱动
        WebDriver webDriver = new ChromeDriver();
        //跳转页面
        webDriver.get("file:///D:/gitee/java-code-exercise/untitled5/src/main/resources/test08.html");
        sleep(3000);
        //定位上传文件按钮，并点击
        WebElement element = webDriver.findElement(By.cssSelector("body > div > div > input[type=file]"));
        //上传文件路径
        element.sendKeys("D:\\无标题.png");
        webDriver.quit();
    }

    private static void test21() throws InterruptedException {
        // 获取浏览器驱动
        WebDriver webDriver = new ChromeDriver();
        // 跳转页面
        webDriver.get("file:///D:/gitee/java-code-exercise/untitled5/src/main/resources/test0502.html");
        //定位弹窗连接按钮，并点击
        webDriver.findElement(By.cssSelector("body > input[type=button]")).click();
        sleep(2000);
        //选择弹窗,并获取弹窗中的信息
        Alert alert = webDriver.switchTo().alert();
        System.out.println("弹窗中的信息：" + alert.getText());
        String info = "Please enter your name";
        if(alert.getText().equals(info)) {
            System.out.println("弹窗信息测试通过");
        }else {
            System.out.println("弹窗信息测试不通过");
        }
        //向弹窗的对话框中输入信息
        alert.sendKeys("我爱你");
        sleep(3000);
        //点击确认按钮
        alert.accept();
//        点击弹框中取消按钮
//        alert.dismiss();
        sleep(3000);
        //获取页面中的值
        String text = webDriver.findElement(By.cssSelector("body")).getText();
        String pageInfo = "Hello 我爱你!";
        if(text.equals(pageInfo)) {
            System.out.println("输入的信息测试成功: " + text);
        }else {
            System.out.println("输入的信息测试失败");
        }
        webDriver.quit();
    }

    private static void test20() throws InterruptedException {
        // 获取浏览器驱动
        WebDriver webDriver = new ChromeDriver();
        // 跳转页面
        webDriver.get("file:///D:/gitee/java-code-exercise/untitled5/src/main/resources/test04.html");
        sleep(3000);
        // 选中下拉框
        WebElement element = webDriver.findElement(By.cssSelector("#ShippingMethod"));
        // 借助Select对象
        Select select = new Select(element);
        // 第一种方式
        // 通过下标定位到指定选项
        //select.selectByIndex(3);//下拉框中选项的下标从0开始

        //第二种方式
        // 通过value属性的值来确定指定的选项
        select.selectByValue("9.03");
        sleep(3000);
        webDriver.quit();

    }

    private static void test19() throws InterruptedException {
        // 获取浏览器驱动
        WebDriver webDriver = new ChromeDriver();
        // 跳转页面
        webDriver.get("file:///D:/gitee/java-code-exercise/untitled5/src/main/resources/test02_01.html");
        sleep(3000);
        // 定位下层框架
        webDriver.switchTo().frame("f1");
        // 定位click按钮并点击
        webDriver.findElement(By.cssSelector("body > div > div > a")).click();
        sleep(2000);
    }

    private static void test18() throws InterruptedException {
        // 获取浏览器驱动
        WebDriver webDriver = new ChromeDriver();
        // 跳转页面
        webDriver.get("file:///D:/gitee/java-code-exercise/untitled5/src/main/resources/test01.html");
        sleep(3000);
        // 通过css选择器中标签的方式，获取所有的input标签元素
        List<WebElement> input = webDriver.findElements(By.cssSelector("input"));
        // 遍历所有元素，对checkbox的元素进行点击
        for(WebElement ele : input) {
            String type = ele.getAttribute("type");
            if(type.equals("checkbox")) {
                //进行勾选
                ele.click();
            }
        }
        sleep(5000);
        webDriver.quit();
    }

    private static void test17() throws InterruptedException {
        // 创建浏览器驱动
        WebDriver webDriver = new ChromeDriver();
        // 进入百度主页面
        webDriver.get("https://www.baidu.com/");
        // 定位新闻按钮并点击
        webDriver.findElement(By.cssSelector("#s-top-left > a:nth-child(1)")).click();
        sleep(3000);
        // webDriver.getWindowHandle(); 获取当前窗口信息
        // 获取浏览器中所有的窗口
        Set<String> windowHandles = webDriver.getWindowHandles();
        // 遍历所有窗口，定位最后一个窗口,也就是百度新闻的敞口
        String target = "";
        for(String win : windowHandles) {
            target = win;
        }
        // 进入百度新闻的窗口中
        webDriver.switchTo().window(target);
        sleep(3000);
        // 进入到新闻页面，定位搜索框并输入“乌克兰”
        webDriver.findElement(By.cssSelector("#ww")).sendKeys("乌克兰");
        // 定位搜索按钮，并点击
        webDriver.findElement(By.cssSelector("#s_btn_wr")).click();
        sleep(3000);
        webDriver.quit();
    }

    private static void test16() throws InterruptedException {
        // 创建浏览器驱动
        WebDriver webDriver = new ChromeDriver();
        // 指定跳转页面
        webDriver.get("https://www.baidu.com/");
        // 选择输入框，输入张三
        webDriver.findElement(By.cssSelector("#kw")).sendKeys("张三");
        // 使用回车键搜索
        webDriver.findElement(By.cssSelector("#kw")).sendKeys(Keys.ENTER);
        sleep(3000);
        // 创建一个Actions对象，生成用户行为。
        Actions action = new Actions(webDriver);
        // 通过CSS选择器定位图片元素，定义一个目标
        WebElement element = webDriver.findElement(By.cssSelector("#s_tab > div > a.s-tab-item.s-tab-item_1CwH-.s-tab-pic_p4Uej.s-tab-pic"));
        //moveToElement(element)是将鼠标移动到指定的目标上
        //contextClick()点击鼠标右键
        //perform()显示以上执行的动作
        action.moveToElement(element).perform();
    }

    private static void test15() throws InterruptedException {
        // 创建浏览器驱动
        WebDriver webDriver = new ChromeDriver();
        // 指定跳转页面
        webDriver.get("https://www.baidu.com/");
        // 选择输入框，输入张三
        webDriver.findElement(By.cssSelector("#kw")).sendKeys("张三");
        sleep(3000);
        //全选输入框中的文本，也就是张三 ctrl+A
        webDriver.findElement(By.cssSelector("#kw")).sendKeys(Keys.CONTROL, "A");
        sleep(3000);
        //剪切文本ctrl+X
        webDriver.findElement(By.cssSelector("#kw")).sendKeys(Keys.CONTROL, "X");
        sleep(3000);
        //粘贴文本ctrl+V
        webDriver.findElement(By.cssSelector("#kw")).sendKeys(Keys.CONTROL, "V");
    }

    private static void test14() throws InterruptedException {
        // 创建浏览器驱动
        WebDriver webDriver = new ChromeDriver();
        // 指定跳转页面
        webDriver.get("https://www.baidu.com/");
        // 选择输入框，输入张三
        webDriver.findElement(By.cssSelector("#kw")).sendKeys("张三");
        // 使用回车键搜索
        webDriver.findElement(By.cssSelector("#kw")).sendKeys(Keys.ENTER);
        sleep(3000);
        // 获取当前页面的url
        System.out.println(webDriver.getCurrentUrl());
        webDriver.quit();

    }

    private static void test13() throws InterruptedException {
        // 创建浏览器驱动
        WebDriver webDriver = new ChromeDriver();
        // 指定跳转页面
        webDriver.get("https://www.baidu.com/");
        // 选择输入框，输入张三
        webDriver.findElement(By.cssSelector("#kw")).sendKeys("张三");
        // 选择百度一下并点击
        webDriver.findElement(By.cssSelector("#su")).click();
        //休眠3秒，等待页面完成渲染
        sleep(3000);
        //将滚动条划到最下面
        String js_bottom = "document.documentElement.scrollTop=10000";
        ((JavascriptExecutor)webDriver).executeScript(js_bottom);
        sleep(3000);
        //将滚动条移动到最上面
        String js_up = "document.documentElement.scrollTop=0";
        ((JavascriptExecutor)webDriver).executeScript(js_up);
        sleep(3000);
        webDriver.quit();
    }

    private static void test12() throws InterruptedException {
        // 创建浏览器驱动
        WebDriver webDriver = new ChromeDriver();
        // 指定跳转页面
        webDriver.get("https://www.baidu.com/");
        // 选择输入框，输入张三
        webDriver.findElement(By.cssSelector("#kw")).sendKeys("张三");
        // 选择百度一下并点击
        webDriver.findElement(By.cssSelector("#su")).click();
        String currentUrl = webDriver.getCurrentUrl();
        System.out.println("搜索到张三的页面的url:" + currentUrl);
        //进入新的页面，休眠3秒
        sleep(3000);
        //选择控制台上的后退按钮
        webDriver.navigate().back();
        //休眠三秒，后退之后，获取当前页面的url
        sleep(3000);
        System.out.println("后退之后，当前页面的url:" + webDriver.getCurrentUrl());
        //进行前进
        webDriver.navigate().forward();
        sleep(3000);
        // 获取到前进后的页面
        String currentUrl1 = webDriver.getCurrentUrl();
        System.out.println(currentUrl1);
        // 判断前进后的页面和第一次搜索到的页面是不是同一个，如果是，则测试通过，否则测试未通过
        if(currentUrl.equals(currentUrl1)) {
            System.out.println("测试通过");
        }else {
            System.out.println("测试未通过");
        }
        webDriver.quit();
    }


    private static void test10() {
        // 创建浏览器驱动
        WebDriver webDriver = new ChromeDriver();
        // 指定跳转页面
        webDriver.get("https://www.baidu.com/");
        // 设置浏览器大小
        webDriver.manage().window().setSize(new Dimension(200, 400));
        webDriver.quit();
    }

    private static void test9() {
        // 创建浏览器驱动
        WebDriver webDriver = new ChromeDriver();
        // 跳转百度页面
        webDriver.get("https://www.baidu.com/");
        //浏览器最大化
        webDriver.manage().window().maximize();
        //定位“换一换"按钮
        String text = webDriver.findElement(By.cssSelector("#hotsearch-refresh-btn > span")).getText();
        if(text != null) {
            System.out.println("测试通过,text:" + text);
        }else {
            System.out.println("测试未通过");
        }
    }

    private static void test8() {
        // 创建浏览器驱动
        WebDriver webDriver = new ChromeDriver();
        // 指定浏览器页面
        webDriver.get("https://www.baidu.com/");
        //获取当前页面的url
        String currentUrl = webDriver.getCurrentUrl();
        //判断当前页面的url与指定跳转的页面的url是否相同
        if(currentUrl.equals("https://www.baidu.com/")) {
            System.out.println("测试通过,当前页面url:" + currentUrl);
        }else {
            System.out.println("测试不通过");
        }
        webDriver.quit();
    }

    private static void test7() {
        // 创建浏览器驱动
        WebDriver webDriver = new ChromeDriver();
        // 指定浏览器页面
        webDriver.get("https://www.baidu.com/");
        // 获取页面的title
        String title = webDriver.getTitle();
        System.out.println("当前页面的title：" + title);
        // 关闭浏览器
        webDriver.quit();
    }


    private static void test6() {
        // 创建浏览器驱动
        WebDriver webDriver = new ChromeDriver();
        // 指定浏览器页面
        webDriver.get("https://www.baidu.com");
        // 定位按钮
        WebElement element = webDriver.findElement(By.cssSelector("#su"));
        // 获取文本
        System.out.println(element.getAttribute("value"));
    }

    private static void test5() {
        // 创建浏览器驱动
        WebDriver webDriver = new ChromeDriver();
        // 指定浏览器页面
        webDriver.get("https://www.baidu.com");
        // 定位输入框
        WebElement importInput = webDriver.findElement(By.cssSelector("#kw"));
        // 输入文本
        importInput.sendKeys("软件测试");
        // 定位按钮
        WebElement clickButton = webDriver.findElement(By.cssSelector("#su"));
        // 进行点击
        clickButton.click();
        // 获取搜索到的页面中指定的所有元素
        // 因为元素不止一个，所以使用findElements

        // 隐式等待，等待3秒
        webDriver.manage().timeouts().implicitlyWait(3, MILLISECONDS);

        List<WebElement> elements = webDriver.findElements(By.cssSelector("a em"));
        //遍历list
        for(int i = 0; i < elements.size(); i++) {
            if(elements.get(i).getText().equals("软件测试")) {
                //如果元素是“软件测试”则表示测试成功，否则测试失败
                System.out.println("测试成功");
            }else{
                System.out.println("测试失败");
            }
        }
    }


    private static void test3() {
        // 创建浏览器驱动
        WebDriver webDriver = new ChromeDriver();
        // 指定浏览器页面
        webDriver.get("https://www.baidu.com");
        // 定位输入框
        WebElement importInput = webDriver.findElement(By.cssSelector("#kw"));
        // 输入文本
        importInput.sendKeys("软件测试");
        //清空输入框中内容
        importInput.clear();
    }

    private static void test2() throws InterruptedException {
        // 创建浏览器驱动
        WebDriver webDriver = new ChromeDriver();
        // 指定浏览器页面
        webDriver.get("https://www.baidu.com");
        // 定位输入框
        WebElement importInput = webDriver.findElement(By.cssSelector("#kw"));
        // 输入文本
        importInput.sendKeys("软件测试");
        // 定位按钮
        WebElement clickButton = webDriver.findElement(By.cssSelector("#su"));
        // 进行点击
        clickButton.click();
        // 获取搜索到的页面中指定的所有元素
        // 因为元素不止一个，所以使用findElements
        // 进行一个睡眠
        sleep(3000);
        List<WebElement> elements = webDriver.findElements(By.cssSelector("a em"));
        sleep(3000);
        //遍历list
        for(int i = 0; i < elements.size(); i++) {
            if(elements.get(i).getText().equals("软件测试")) {
                //如果元素是“软件测试”则表示测试成功，否则测试失败
                System.out.println("测试成功");
            }else{
                System.out.println("测试失败");
            }
        }
    }

    public static void test1() {
        // 创建浏览器驱动
        WebDriver webDriver = new ChromeDriver();
        // 指定页面
        webDriver.get("https://www.baidu.com");
        //通过 CSS 选择器定位元素
//        WebElement element = webDriver.findElement(By.cssSelector("#su"));
        //通过xpath方式定位元素
        WebElement element = webDriver.findElement(By.xpath("//*[@id=\"su\"]"));
        if(element == null) {
            // 表示当前页面中没有指定的元素
            System.out.println("当前页面没有指定的元素");
        }else {
            System.out.println("测试成功");
        }
        webDriver.quit();
        webDriver.close();
    }
}